---
category: reference
heading: 'Noodle as node module'
---

**Note:** Since noodle's internal cache uses an interval this will keep the 
related node process running indefinately. Be sure to run `noodle.stopCache()` 
in your code when you're finished with noodle.

## Methods

### noodle.query

The main entry point to noodle's functionality is the `query` method. This 
method accepts a query or an array of queries as its only parameter and returns 
a [promise](https://github.com/kriskowal/q). 

    var noodle = require('noodle');
    noodle.query(queries).then(function (results) {
      console.log(results);
    });

The makeup of query(s) is analagous to using noodle as a web service (as 
[stated above](http://noodlejs.com/reference/#query-syntax)). The 
exception being that you supply a proper object and not JSON.

### noodle.fetch

This method returns a [promises](https://github.com/kriskowal/q). Which upon 
resolutions hands over the requested web document.

    noodle.fetch(url).then(function (page) {
      console.log(page);
    });


### noodle.html.select

For applying one query to a html string and retrieving the results.

    noodle.html.select(html, {selector: 'title', extract: 'innerHTML'})
    .then(function (result) {
      console.log(result);
    });


### noodle.json.select

For applying one query to a parsed JSON representation (object).

    var parsed = JSON.parse(json);
    noodle.html.select(parsed, {selector: '.name'})
    .then(function (result) {
      console.log(result);
    });

## noodle.feed.select

Normalises an RSS, ATOM or RDF string with 
[node-feedparser](https://github.com/danmactough/node-feedparser) then proxies 
that normalised object to `noodle.json.select`.

### noodle.xml.select

Proxies to `noodle.json.select`.

### noodle events

noodle's `noodle.events` namespace allows one to listen for emitted cache 
related events. Noodle inherits from node's [EventEmitter](http://nodejs.org/api/events.html#events_class_events_eventemitter).

    // Called when a page is cached
    noodle.events.on('cache/page', function (obj) {
      //obj is the page cache object detailing the page, its headers 
      //and when it was first cached
    });

    // Called when a result is cached
    noodle.events.on('cache/result', function (obj) {
      //obj is the result cache object detailing the result and when
      //it was first cached
    });

    // Called when the cache is purged
    noodle.events.on('cache/purge', function (arg1, arg2) {
      //arg1 is a javascript date representing when the cache was purged
      //arg2 is the time in milliseconds until the next cache purge
    });

    // Called when a cached item has expired from the cache
    noodle.events.on('cache/expire', function (obj) {
      //obj is the cache item
    }); 

### Configuration

Configuration is possible programmatically via `noodle.configure(obj)`.

This accepts a conig object which can be partly or fully representing the 
config options.

This object is applied over the existing config found in the `config.json`.

Example for change just two settings:

    var noodle = require('noodle');

    // Do not display messages to the terminal and set 
    // the default document type to json
    
    noodle.configure({
      debug: false,
      defaultDocumentType: "json"
    });